# -*- coding: utf-8 -*-

def func():
    print('=====1')
    yield 1
    print('=====2')
    yield 2
    print('=====3')
    yield 3


g = func()
print(g.__next__())
# #  #会触发函数的执行，直到碰到一个yield停下来，并且将yield后的值当作本次next的结果返回
print(g.__next__())
print(next(g))      # 使用next()方法等同于__next__()
# 报错和迭代器一样,代表取完了
# next(g)
for i in func():
    print(i)
# 总结yield:只能在函数内使用
# 1. yield提供了一种自定义迭代器的解决方案
# 2. yield可以保存函数的暂停的状态
# 3. yield对比return
#   1. 相同点：都可以返回值，值的类型与个数都没有限制
#   2. 不同点：yield可以返回多次值，而return只能返回一次值函数就结束了
